#if !defined(__APP_BUFFER_H)
#define __APP_BUFFER_H

#include <pthread.h>

// 小缓冲区
typedef struct {
    // 内存指针
    unsigned char *ptr;  // 必须得加unsigned
    // 总大小 
    int total_size;
    // 数据长度
    int len;
} SubBuffer;

// 缓冲区
typedef struct {
    // 包含2个子缓冲区指针的数组
    SubBuffer *sub_buffers[2];
    // 读的索引
    int read_index;
    // 写的索引
    int write_index;
    // 读锁
    pthread_mutex_t read_lock;
    // 写锁
    pthread_mutex_t write_lock;
} Buffer;

/**
 * 初始化缓冲区
 */
Buffer *app_buffer_init(int total_size);

/**
 * 释放缓冲区
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 写入数据
 * @param buffer 缓冲区指针
 * @param data 要写入的数据
 * @param data_len 数据长度
 * @return 0: 成功，-1: 失败
 */
int app_buffer_write(Buffer *buffer, char *data, int data_len);

/**
 * @brief 读取数据
 * @param buffer 缓冲区指针
 * @param data_buf 接收读取到的数据的缓存容器
 * @param buf_size 缓存容器大小
 * @return 读取到的数据长度， 如果失败：-1
 */
int app_buffer_read(Buffer *buffer, char *data_buf, int buf_size);



#endif // __APP_BUFFER_H
